#include <iostream>
#include <future>
#include <thread>
#include <chrono>

// std::promise 用于设置值，而 std::future 用于获取值。
// 通过 std::promise 的 set_value() 方法来设置结果，这个结果会传递给与之关联的 std::future

void Add(int a, int b, std::promise<int>& result_prom)
{
    std::cout << "Add() is called" << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(3));
    result_prom.set_value(a + b);
    return;
}


int main()
{
    std::promise<int> prom;
    std::future<int> fu = prom.get_future();    // 设置与promise对象关联的future对象

    std::thread th(Add, 15, 25, std::ref(prom));
    int result = fu.get();
    std::cout << "result = " << result << std::endl;

    th.join();
    return 0;
}